//演讲大厅安排  把申请按结束时间升序排列，然后类似于求最长不下降子序列
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=5000;
struct Ask{
    int p,k;
    bool operator <(const Ask other)const {
        return k<other.k;
    }
};
Ask asks[MAXN+1];
int n;
int maxt[MAXN+1];

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int p,k;
        cin>>p>>k;
        asks[i].p=p;
        asks[i].k=k;
    }
    sort(asks,asks+n+1);//因为从1元素开始使用，0元素空着
    maxt[1]=asks[1].k-asks[1].p;
    for(int i=2;i<=n;i++){
        maxt[i]=asks[i].k-asks[i].p;
        for(int j=1;j<i;j++){
            if (asks[j].k<=asks[i].p){
                if (maxt[i]<maxt[j]+asks[i].k-asks[i].p)
                    maxt[i]=maxt[j]+asks[i].k-asks[i].p;
            }else break;
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++) 
        if (ans<maxt[i]) ans=maxt[i];
    cout<<ans;
}